import _fse from 'fs-extra'
import _fs from 'fs'
import _path from 'path'


/**
 * 文件操作工具
 * 参考文档：https://github.com/jprichardson/node-fs-extra
 */
let FileUtil = {
  /**
   * 移动文件（夹）到目标位置
   * 文件只会覆盖原文件存在的，目标不存在的会保留
   * @param src   原文件（夹）
   * @param dest  目标位置（不存在将自动创建）
   * @param opts  移动选项 fs-extra的参数
   */
  moveSync(src, dest, opts) {
    _fse.copySync(src, dest, opts)
    _fse.removeSync(src)
  },
  /**
   * 复制文件 相当于cp命令
   * @param src   源文件
   * @param dest  目标文件
   * @param opts  选项
   */
  copySync(src, dest, opts) {
    _fse.copySync(src, dest, opts)
  },
  /**
   * 创建一个文件
   * @param file 要创建的文件路径
   */
  createFileSync(file) {
    _fse.createFileSync(file)
  },
  /**
   * 创建目录, 相当于 mkdir -p
   * @param pathv 目录路径
   */
  createDir(pathv) {
    let path = pathv
    let stat = _fs.statSync(path)

    if (stat.isFile()) {
      path = _path.dirname(path)
    }
    if (!_fs.existsSync(path)) {
      _fs.mkdirSync(path, {recursive: true})
    }
  },

  /**
   * 创建文件夹
   * @param dirPath
   * @param callback
   */
  mkdirs(dirPath, callback) {
    _fs.exists(dirPath, function (exists) {
      if (exists) {
        return callback()
      }
      FileUtil.mkdirs(_path.dirname(dirPath), function () {
        _fs.mkdir(dirPath, callback)
      })
    })
  },
  /**
   * 递归创建文件夹，同步调用
   * @param dirPath
   * @return:
   */
  mkdirsSync(dirPath) {
    if (!_fs.existsSync(dirPath)) {
      FileUtil.mkdirsSync(_path.dirname(dirPath))
      _fs.mkdirSync(dirPath)
    }
  },
  /**
   * 写出文件内容
   * @param dirPath
   * @param content
   * @param callback
   */
  writeFile(dirPath, content, callback) {
    _fs.writeFile(dirPath, content, err => {
      if (err) {
        return callback({
          code: 0,
          msg: '写入文件异常'
        })
      }
      callback({
        code: 1,
        msg: '写入文件成功'
      })
    })
  },
  /**
   * 创建文件并写入文件内容（同步方法）
   * @param dirPath 创建文件全路径，包含文件名
   * @param content 文件内容
   * @return:
   */
  writeFileSync(dirPath, content) {
    try {
      _fs.writeFileSync(dirPath, content)
      return true
    } catch (error) {
      return false
    }
  }
}

// module.exports = FileUtil
FileUtil.writeFileSync('hliushi_temp.txt', '666')

export default FileUtil
